package q283_moveZeroes;

public class Solution {
    /*
    编写函数将所有0移动到数组末尾 同时保持其它元素相对顺序
     */
    public void moveZeroes(int[] nums) {
        /*
        试想使用双指针解决该问题
        首先两个指针都指向0
        当p2不为0时，p1处的值就会被p2处的值覆盖，并使p1后移一位
        第一个循环结束后，p1也就填充了所有不是0的数到数组的前面
        并且p1所在的位置就是应该开始填充0的位置，因此只需要继续把p1及后面的都填充为0即可
         */
        int p1 = 0, p2 = 0;
        while (p2 < nums.length) {
            if (nums[p2] != 0) {
                nums[p1] = nums[p2];
                p1++;
            }
            p2++;
        }

        while (p1 < nums.length){
            nums[p1] = 0;
            p1++;
        }
    }
}
